package com.an.pay.client;

import com.an.pay.entity.WxPayParams;
import com.an.pay.entity.WxRefundParams;
import com.an.pay.service.wx.NativePayService;
import org.springframework.beans.factory.annotation.Autowired;

import java.io.IOException;
import java.util.Map;


public class WxPayClient {

    @Autowired
    private NativePayService nativePayService;

    /**
     *  native 支付
     * @param wxPayParams: 微信支付需要的参数
     * @return
     * @throws Exception
     */
    public Map<String,String> nativePay(WxPayParams wxPayParams) throws Exception {
        return nativePayService.pay(wxPayParams);
    }

    /**
     *  native 的订单状态查询
     * @param orderNo  订单号
     * @param <T>  订单号类型
     * @return 返回查询订单的数据 Map
     */
    public <T> Map<String,Object> findOrderNoStatus(T orderNo)throws IOException {
        return nativePayService.findOrderNoStatus(orderNo);
    }

    /**
     *  native 的关闭订单
     * @param orderNo  订单号
     * @param <T> 订单数据类型
     * @return 是否关闭
     */
    public <T> void closeOrder(T orderNo) throws IOException {
         nativePayService.closeOrder(orderNo);
    }

    /**
     *  native退款
     * @param  wxRefundParams : 里面封装了退款订单需要的信息
     *
     */
    public <T> void refund(WxRefundParams wxRefundParams) throws IOException {
        nativePayService.refund(wxRefundParams);
    }

    /**
     *  查询退款的状态
     * @param refundNo  退款订单号
     * @param <T> 类型
     * @return  退款信息
     */
    public <T> Map<String,String> findRefund(T refundNo) throws IOException {
        return nativePayService.findRefund(refundNo);
    }

    /**
     * 申请账单的下载地址
     * @param billDate 申请下载账单的时间 ：从什么时候开始的时间
     * @param type ： 有两种类型的账单
     *              -   tradebill ： 交易账单
     *              -   fundflowbill ： 资金账单
     * @return 账单下载地址
     */
    public String requestBill(String billDate,String type) throws IOException {
        return nativePayService.requestBillAddress(billDate,type);
    }

    /**
     * 下载账单
     * @param downloadAddress 账单下载地址
     * @return 账单数据
     */
    public String downloadBill(String downloadAddress) throws IOException {
        return nativePayService.downloadBill(downloadAddress);
    }



}
